Alteryxで小計・総計の行を追加してみよう
こんにちは、小澤です。
えー、タイトルの通りです。 以下はPivot Tableを使った例ですが、Excelとかで集計する際はわりかしつけるようなアレです。
Alteryxのデータ構造と小計・総計行
Excelでデータをいじくりまわしたり、いじくりまわした結果をレポートしたりといった人は世の中に多くいるかと思われます。 そのため、Alteryxを使ってるけど最終的な成果物としては上述のような形式で出したい、というケースもまた多くあることでしょう。
一方、Alteryxでいじくりまわすデータは基本的にテーブル構造のものとなります。 これは列ごとに計測対象となる項目が決められており、1行が1つの実際に観測されたレコードとなる形式です。
このデータ形式は、Excelでもテーブルとして扱うことが可能なものとなっており、 先ほどのPivot Tableなんかもこの形式のデータに対して集計を行った後のものとなっています。
AlteryxでもSummarizeツールを利用するなどして、同じようにカテゴリ項目ごとに集計を行った結果を出力できます。
見比べてみれるとわかるかと思いますが、Alteryxで集計した結果はカテゴリごとの小計や全体での総計に相当するものは出力されていません。 Alteryxでは一貫して各ツールの出力はテーブル構造となっているためです。 この仕組みによって、あるツールの出力を次のツールの入力にするという、順に処理を行っていき、最終的に欲しい形式になるまで集計や分析が行える仕組みを実現しています。 そのため、異なる粒度の集計処理結果を同一のデータ内に含めるということはしません。 粒度の異なる集計結果自体が欲しい場合は、グループ化対象を変更することで以下のようにそれぞれ取得可能です。
最初のExcelを使った集計出力と見比べていただければ、それぞれの数字は同じものが取得で来ていることが確認できます。
これによって、各行で保持しいてるデータの意味が常に同じとなるため、後続の処理でFormulaツールやFilterツールによる分岐が不要となる扱いやすい形式となっています。
データと見せ方
このような感じのため、Alteryxではツールの出力結果がデータとして扱いやすい形式である一方、それが人間にとって見やすい形式であるとは限りません。 (中には集計粒度とにバラバラに出してくれた方がみやすいわーって人もいるかもしれませんがw)
というわけで、データをいじくりたい時にはいじくりやすい形式のまま扱い、最終的な出力を行う際に人間が見やすい形に整えるというのを意識するといい感じになるでしょう。
Alteryxでデータを見せる形に整えるといえば、Data InvestigationやReportingカテゴリにあるツールが思い浮かびますね。 ちょうどReportingカテゴリにはレポート用の表形式にデータを整えるTableツールがあるじゃないですか!
と、言いたいところなんですが、version 2019.3現在、残念ながらこのツールには集計行の作成機能はありません。 書式などの設定は可能なのですが、何らかの項目を追加するような機能はないのです。 最近では"Visualytics"という言葉を使って可視化部分も強化されてきていますが、 元々の思想としては、そういった部分はBIツールなどと連携する前提となっているため、古来より存在するTableツールにそこまで期待するのはなかなか酷なことと言えるでしょう。
とはいえ、何とかしたい! 何とかしたいので、"見せ方を作る処理"として、Tableツールの出力が以下のような感じになるようなワークフローを作成してみましょう。
ワークフローを作成する
今回作成するワークフローは以下のようになります。
今回は、対象として以下のデータを利用しています。
まずは、最初にSummarizeツールで先ほども紹介した粒度の異なる以下3つの集計を行っています。
- 製品サブカテゴリーごと
- 製品カテゴリーごと
- 全体
Summarizeツールの設定は以下のようになっています。
それぞれの出力結果は冒頭で紹介したものと同様になります。
続いて、小計および総計行は"製品カテゴリー"列にそれを表す項目名が入るため、Formulaツールでその値を設定します。
その後、各カテゴリごとに一番下の行が小計、全体の一番下が合計となるようにするため、 まずはまずはカテゴリごとの集計とサブカテゴリごとの集計をUnionツールで結合して、"製品カテゴリー"列でソートします。 これによって以下のような結果が得られます。
この結果にさらに全体での集計結果をUnion結合することで、末尾に合計行が追加されます。
これで完成!と行きたいことろですが、それっぽい見た目にするために、"製品カテゴリー"列の値が同じものは最初の行だけ出力されるようにします。 これにはMulti-Row Formulaツールを利用してまず、新しい列を作成します。
if isnull([Row-1:製品カテゴリー]) || [製品カテゴリー] != [Row-1:製品カテゴリー] then [製品カテゴリー] else null() endif
以下のようなデータが生成されます。
Selectツールで"製品カテゴリー"列を削除して、"New Field"列を"製品カテゴリー"に修正したのち、先頭に移動させます。 こんな感じになりました。
あとは、これをTableツールでテーブルにしちゃえばいい感じですね!
最後にちょろちょろっと手を加えます。 まず、Tableツール右下の「Create Row Rule..」を選択します。
以下のようなダイアログが表示されます。
ApplyにFormulaで以下の条件を指定します。
[製品カテゴリー] == "合計" || Contains([製品カテゴリー], "小計")
SytlesのFontにチェックを入れてBoldフォントを設定します。 これで、小計・合計行が太字で出力されるようになります。
続いて、Per Column Configurationにて"利益"列を選択して「Create...」を選択します。
こちらも先ほどと似たようなダイアログが表示されるので、利益がマイナスのときのみ赤字で表示されるように設定しています。
1つ目の設定と2つ目の設定の違いはテーブル全体に適用されるか、特定の列のみに適用されるかとなります。 太字の設定はテーブル全体となるため、条件を満たす行全体が太字となります。 一方、2つ目の設定は特定の列のみとなるため、条件を満たす行のうち設定対象の項目のみが赤字となります。
この設定を行ったのち、再度ワークフローを実行すると、以下のような最終結果が得られます。 最初にお見せした結果と同じものになっていますね。
おわりに
今回は、Alteryxで小計・総計行のあるテーブルを作成してみました。 Alteryxはどうデータを処理するかのフローを定義するためのもののため、どう見せるかについての実装は少々手間がかかりますが、工夫次第でなんとかできないことはないですw
参考資料
こういった処理は皆さん需要があるようでコミュニティでも話題として上がっています。 今回のワークフロー作成に際しては以下を参考にしていますので、こちらも併せてご参照ください。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。